//
//  NSURLSessionController.h
//  httpDemo
//
//  Created by yuzhanjie on 2018/4/30.
//  Copyright © 2018年 yuzhanjie. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface NSURLSessionController : UIViewController

//NSURLSession与NSURLConnection的区别
//在Xcode7.0之后（iOS9之后）,苹果废弃了NSURLConnection方法,数据请求使用NSURLSession

//使用现状
//NSURLSession是NSURLConnection的替代者，在2013年苹果全球开发者大会上（WWDC2013）随iOS7一起发布的，是对NSURLConnection进行了重构优化后的新的网络接口。从iOS9开始，NSURLConnection中发送请求的两个方法已经过期（同步请求，异步请求）,初始化网络连接的方法也被设置为过期，系统不再推荐使用，建议使用NSURLSession发送网络请求


//普通任务和上传
//NSURLSession针对下载/上传等复杂的网络操作提供了专门的解决方案，针对普通、上传和下载分别对应三种不同的网络请求任务：NSURLSessionDataTask,NSURLSessionUploadTask和NSURLSessionDownloadTask。创建的task都是挂起状态，需要resume才能启动。


//下载任务方式
//NSURLConnection下载文件时，先是将整个文件下载到内存，然后再写入到沙盒，如果文件比较大，就会出现内存暴涨的情况。
//而使用NSURLSessionUploadTask下载文件，会默认下载到沙盒中的tem文件中，不会出现内存暴涨的情况


//请求方法的控制
//NSURLConnection实例化对象，实例化开始，默认请求就发送(同步发送),不需要调用start方法。而cancel可以停止请求的发送，停止后不能继续访问，需要创建新的请求。
//NSURLSession有三个控制方法，取消(cancel)、暂停(suspend)、继续(resume)，暂停以后可以通过继续恢复当前的请求任务。


//断点续传的方式
//NSURLConnection进行断点下载，通过设置访问请求的HTTPHeaderField的Range属性，开启运行循环，NSURLConnection的代理方法作为运行循环的事件源，接收到下载数据时代理方法就会持续调用，并使用NSOutputStream管道流进行数据保存。
//NSURLSession进行断点下载，当暂停下载任务后，如果downloadTask（下载任务）为非空，调用cancelByProducingResumeData:(void (^)(NSData *resumeData))completionHandler这个方法，这个方法接收一个参数，完成处理代码块，这个代码块有一个NSData参数resumeData，如果resumeData非空，我们就保存这个对象到视图控制器的resumeData属性中，在点击再次下载时，通过调用[ [self.session downloadTaskWithResumeData:self.resumeData]resume]方法进行继续下载操作
//经过以上比较可以发现，使用NSURLSession进行断点下载更加便捷.


//配置信息
//NSURLSession的构造方法（sessionWithConfiguration:delegate:delegateQueue）中有一个NSURLSessionConfiguration类的参数可以设置配置信息，其决定了cookie，安全和高速缓存策略，最大主机连接数，资源管理，网络超时等配置。NSURLConnection不能进行这个配置，相比较与NSURLConnection依赖与一个全局的配置对象，缺乏灵活性而言，NSURLSession有很大的改进了。



@end
